go的interface应该是go语言中比较好用的一个特性了。今天说下interface常用的用法。 1。空接口interface{} interface是一个特殊的类型,interface{}是一个空接口,只要一个任意类型实现了接口中一个或者多个方法,那么这个类型就实现了该接口,所以一个空接口中有0个方法,所以任意类型都实现了这个interface{},因此interface{}可以接收任何值。 具体的用法如下:funcmain(){testInterface(1)testInterface(aaa)testInterface(0。01)varaAa。mma。nntestInterface(a)}functestInterface(vinterface{}){s:fmt。Sprintf(传入的值是:v,v)fmt。Println(s)}typeAstruct{mstringnstring} 输出结果: 2。接口多态 只要任意类型实现了接口中的一个或者多个方法,那么这个类型的值就能够使用这个接口的变量来存储,这样可以根据这个特性实现多态。 具体的用法如下: 定义支付接口:typePayinterface{GetAccountBalance(userName,accountNostring)(string,error)} 定义两种支付并调用两种支付方法:funcmain(){varpayserviceservice。PaypayserviceNewPay1(http:127。0。0。1:8081)payservice。GetAccountBalance(aa,bb)payserviceNewPay2(http:127。0。0。1:8082)payservice。GetAccountBalance(cc,dd)}typePay1struct{Addrstring}funcNewPay1(addrstring)Pay1{returnPay1{Addr:addr}}func(pPay1)GetAccountBalance(userName,accountNostring)(string,error){fmt。Println(支付1)fmt。Println(p。Addr)fmt。Println(userName)fmt。Println(accountNo)return,nil}typePay2struct{Addrstring}funcNewPay2(addrstring)Pay2{returnPay2{Addr:addr}}func(pPay2)GetAccountBalance(userName,accountNostring)(string,error){fmt。Println(支付2)fmt。Println(p。Addr)fmt。Println(userName)fmt。Println(accountNo)return,nil} 输出结果: