golang 함수 문법

23830 단어 golanggo

go 함수의 특징


go의 함수는 여러 개의 반환값이 있을 수 있다


자주 사용하는 자바 개발에 있어 실체류가 징그럽지 않나요?경험이 있는 자바 개발에 대해 구역질이 날 것이다. 우리가 최적화 코드를 필요로 할 때 많은 수의 컴파일러가 들어오고 컴파일러가 쌓여 있는 것을 발견하면 컴파일러가 실체류로 새로 만들어서 컴파일러를 저장해야 한다.실체류가 갈수록 많아지고 코드가 특히 보기 흉해서 강박증이 범할 것이다.Golang은 여러 개의 값을 되돌려 이 문제를 해결하고 개발 주기를 단축시켰다.

go의 반환값도 변수 이름 (규범) 을 지정해야 한다.


물론 쓰지 않을 수도 있지만, 우리 코드는 써야 할 뿐만 아니라, 반드시 예쁘게 써야 한다. 틀처럼 우아하고 규범화되어야 한다

함수의 기본 쓰기


func [함수 이름]([함수 인삼])([함수 반환값]) {
함수체
}

몇 가지 예를 보겠습니다.


인삼이 있어도 되돌아오는 값이 없다

a:=10
func firstFunction(a int)(){
//   
}
func firstFunction(a,b int)(){
//   
}
func firstFunction(a int,b string)(){
//   
}

부정확한 매개 변수


자바에서 mybatis 원본 코드에서 자주 사용하는 변수 변수입니까? go를... 로 표시하는 것도 마찬가지입니다. 문법은 다음과 같습니다. [변수 이름]... [type], 예를 들어: a... int, b... string
func ChangeParamter(args...string){
//   
}

부정확한 매개 변수도 여러 개 전달할 수 있다


호출할 때 입참하는 거 잊지 마세요.
func ChangeParamter(a string,args...int){
//   
}
func main(){
ChangeParamter("qwe",1,3,4,5)
}

부정확한 매개 변수는 마지막 하나만 놓을 수 있습니다


잘못된 시범을 보이다
func ChangeParamter(a...string,args...int){
//      
}

부정확한 매개 변수가 함수 간에 전달되다 (한꺼번에 모두 전달됨)


변수 이름으로... 을 더하여 모든 매개 변수 [변수 이름] 가져오기...
func ChangedParamter1(args...int){
//   
}
func ChangedParamter2(args...int){
	ChangedParamter1(args...)
}

부정확한 매개 변수가 함수 간에 전달됨(지정된 위치의 값을 전달함)


가변 매개 변수 0에서 2 위치의 값을 전송하다
func ChangedParamter1(args...int){
//   
}
func ChangedParamter2(args...int){
	ChangedParamter1(args[:2]...)
}

가변 매개 변수 2 뒤의 값을 전송하다
func ChangedParamter1(args...int){
//   
}
func ChangedParamter2(args...int){
	ChangedParamter1(args[2:]...)
}

다음은 되돌아오는 값이 있는


규범에 맞지 않는 걸로 할게요.
func function()(result int){
	return 666
}

다시 한 번 규범화된 것도 역시 정부의 요구이다
func function()(result int){
	result = 666
	return
}

다중 반환 값

func function()(result int,str string,b int){
	result,str,b = 666,"123",3
	return
}

return으로 바로 되돌아갈 수 있습니다. (다른 언어와 마찬가지입니다.)

func function(){
	//   return ,    
	return
}

함수에 별명을 지어라!type


함수도 일종의 데이터 형식이다!


이것은 매우 중요하다. 이것도 다태적인 셈이다. 고의 새로운 문법이고 매우 유연하다


코드를 예쁘게 쓰려면 익숙해져야 한다


이 SpecialName 성명 후 함수 형식이 되어main 방법에서 호출됩니다
//        
type SpecialName func(a int)(b int )

func function(a int)(b int ){
	b=a
	return
}

func main(){
    //    SpecialName       
	var testfunc SpecialName;
	//  testfunc     ,       
	// function     SpecialName  
	testfunc=function
	//        function
	testfunc(1,3)
}

다음은 함수로 다태를 실현할 것이다


하나의 방법으로 가감승제를 실현하다


여기가 어려워지기 시작했어요. 이 기능은 자바의 인터페이스와 실현 인터페이스, 전략 모델과 비슷해요!

package main

//  
func Add(a int,b int)(result int){
	result=a+b
	return
}

//  
func Sub(a int,b int)(result int){
	result=a+b
	return
}

//  
func Mult(a int,b int)(result int){
	result=a+b
	return
}

//  
func Div(a int,b int)(result int){
	result=a+b
	return
}

//      math     
type Math func(a int,b int)(result int)

//     
//   Math
func Caculate(a int,b int,method Math)(result int){
	
	//           ,   ,    
	result=method(a,b)
	return 
}

func main() {
	//    
	Caculate(1,2,Add)
	//    
	Caculate(1,2,Sub)
	//    
	Caculate(1,2,Mult)
	//    
	Caculate(1,2,Div)
}

익명 함수와 클립


익명 함수 즉 함수 이름이 없는 클립은 이 함수로 바깥의 값을 얻을 수 있다. 전역 변수의 값을 얻는 것은 자바, 익명 내부 클래스와 비슷하다는 뜻이다.
func main(){
	//               f1
	f1:=func(){
		//   
	}
	//             
	func(){
		//   
	}()
}

매개 변수와 반환 값이 있는 익명 함수 직접 호출

func main(){
	//e,f       
	e,f:=func(a int,b int)(c int ,d int){
		//   
		return c,d
	}(10,10)
}

함수의 반환값도 익명 함수일 수 있다

//   
func Test1() func(){
	f:=func(){
	//   
	}
	return f
}
//   
func Test2() func(){
	return func(){
	//   
	}
}

defer 호출 지연


defer는 함수 내부에만 놓을 수 있습니다. 함수가 끝나기 전의 찰나에 실행됩니다. 예를 들어 파일을 읽을 때 흐르는 defer를 끄는 것은 자바의finally와 같습니다. 어떻게든 실행됩니다.
func main(){
	defer printf("a")
	printf("b")
	//     ba  
}

여러 개의 defer 문장은 선진적이고 후진적인 순서에 따라 집행되는데, 바로 반자 집행이다

func main(){
	defer printf("a")
	defer printf("b")
	//     ba  
}

국부와 전역 변수는 이름을 바꿀 수 있고, 사용 시 원칙에 가깝다.

package main
	a:=10
	func main{
		var a float32
	}

좋은 웹페이지 즐겨찾기