golang返回,golang返回接口

本文目錄一覽:

golang函數返回值是結構體值的時候,為何不能對成員賦值呢?

1,右值不可賦值

2,函數返回的是右值

getTest()是右值,結構體整體都是右值,右值不可賦值

getTestPoint()返回當然也是右值,但只有指針是右值,即你不能給返回的指針賦值(例如:getTestPoint() = nil),但是可以給指針指向的結構體成員賦值(就像你代碼里那樣)

有右值自然就有左值,左值是可被賦值的,例如

t := getTest() //getTest() 返回的右值,賦值給左值t

t.test = 1,左值可被賦值

golang 方法返回的結構體為什麼取不到地址?

golang方法(method)返回值提取結構體(struct)取不到地址的原因是,①返回值並沒有保存到變量中,返回值本身只是臨時保存在程序運行的堆棧的某個不確定位置,不能取地址;②實參取地址用的操作符是是,而形參聲明變量類型為指針,需要地址值用的才是*;③聲明形參為指針的參數的實參只能為地址值。

故先把修改後的代碼列出,修改要點是把“*NewPerson1().Speak()”改為“var b=NewPerson1();(b).Speak()”,同時把“NewPerson2().Speak()”改成“var a=NewPerson2();(a).Speak()”,代碼列出如下:

package main;

import “fmt”;

type PersonA struct{

 name string

}

func (p *PersonA) Speak () {

 fmt.Println ( “person speak” ,p.name)

}

func (p PersonA) Walk ( ){

 fmt . Println ( “person walk”,p.name)}

func NewPerson1()(p PersonA){

 return PersonA{“new Person1”}}

func NewPerson2()(p PersonA){

 return PersonA{“new Person2”}}

func main () {

 var a=NewPerson2 (); (a).Speak (); 

a .Walk ();

 fmt. Println (“——————–“) ;

var b=NewPerson1 ();(b).Speak ();

 b.Walk ()}

go代碼調試效果

關於指針變量的使用這一點go語言和其他有指針的程序語言如c語言是一樣的,從來只有返回值為地址/指針,而從沒有在賦值前給返回值取地址這種運算,類似的錯誤晚點再整理。

不一樣的是,go語言更簡單go語言函數可以使用結構體或者結構體的指針(pointer)以傳遞結構體參數,而且和c語言不一樣的是,go語言沒有區分結構體指針和結構體訪問成員的運算符,go語言只有“.”適用於兩種情況,而沒有c語言為結構體指針專門準備的“-”運算符。

可以使用結構體指針,作為結構體的方法的參數以指代自身嗎,

golang怎麼返回結構體

用golang解析二進制協議時,其實沒必要管結構體的字段的對齊規則,何況語言規範也沒有規定如何對齊,也就是沒有規則。用encoding/binary.Read函數直接讀入struct里就行,struct就像c那樣寫

type Data struct {

Size, MsgType uint16

Sequence uint32

// …

}

golang編譯器加不加padding,Read都能正常工作,runtime知道Data的布局的,不像C直接做cast所以要知道怎樣對齊。

用unsafe.Alignof可以知道每個field的對齊長度,但沒必要用到。

package main

/*

#include stdint.h

#pragma pack(push, 1)

typedef struct {

uint16_t size;

uint16_t msgtype;

uint32_t sequnce;

uint8_t data1;

uint32_t data2;

uint16_t data3;

} mydata;

#pragma pack(pop)

mydata foo = {

1, 2, 3, 4, 5, 6,

};

int size() {

return sizeof(mydata);

}

*/

import “C”

import (

“bytes”

“encoding/binary”

“fmt”

“log”

“unsafe”

)

func main() {

bs := C.GoBytes(unsafe.Pointer(C.foo), C.size())

fmt.Printf(“len %d data %v\n”, len(bs), bs)

var data struct {

Size, Msytype uint16

Sequence uint32

Data1 uint8

Data2 uint32

Data3 uint16

}

err := binary.Read(bytes.NewReader(bs), binary.LittleEndian, data)

if err != nil {

log.Fatal(err)

}

fmt.Printf(“%v\n”, data) // {1 2 3 4 5 6}

buf := new(bytes.Buffer)

binary.Write(buf, binary.BigEndian, data)

fmt.Printf(“%d %v\n”, buf.Len(), buf.Bytes()) // 15 [0 1 0 2 0 0 0 3 4 0 0 0 5 0 6]

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/187754.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-28 06:25
下一篇 2024-11-28 06:25

相關推薦

  • 使用Golang調用Python

    在現代軟件開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Python接口自動化測試

    本文將從如下多個方面對Python編寫接口自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 接口自動化測試是軟件測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • Jadoor門鎖開發接口接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發接口,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發接口簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端接口設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端接口的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高接口的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27
  • 期貨數據接口 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據接口 Python: 一、數據接口簡介 期貨數據接口是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • 如何快速發布http接口

    想要快速發布http接口,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發布http接口非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • Javaweb 接口返回數據的定義與實現

    本文將介紹 javaweb 如何定義接口返回數據,並提供相應的代碼示例。 一、接口返回數據的定義 在 javaweb 開發中,我們經常需要通過接口返回數據。接口返回的數據格式通常是…

    編程 2025-04-27
  • Postman接口自動化

    一、安裝和使用Postman Postman是一個強大的API測試工具,可以使用它來測試各種類型的API請求和響應。在進行接口自動化測試之前,首先需要安裝和使用Postman。以下…

    編程 2025-04-25

發表回復

登錄後才能評論